<?php

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Session;
use App\Http\Controllers\Home\ComController;

class OrderController extends Controller
{
    
	
	// 执行 生成订单
	public function createOrder( Request $request )
	{
		// 获得购物车里的商品集合
		$carts = Session::get('cart');
		// 获取商品集合
		$coms = array();
		// 每个商品的 购买量
		$nums = array();
		foreach( $carts as $key => $com )
		{
			if( !in_array( $com['id'],$coms ) )
			{
				$coms[ $com['id'] ]=$com['id'];
				$nums[ $com['id'] ]=$com['num'];
			}else
			{
				$nums[ $com['id'] ] += $com['num'];
				$stock_info = ComController::getStock( $com['id'] );
				// 数量 超过了 实际库存
				if( $nums[ $com['id'] ] > $stock_info->stock )
				{
					// 等于最大库存
					$nums[ $com['id'] ] = $stock_info->stock;
				}
			}
		}
		// 商品 内容
		$coms_info = DB::table('com as c')
					->select( "c.*",'cp.pic_url' )
					->leftJoin( 'com_pic as cp','cp.sku','=','c.id' )
					// 指定 商品
					->whereIn('c.id', $coms )
					// 主图
					->where('cp.type','=',1)
					->get();
		
		$need_to_pay = 0;
		foreach( $coms_info as $key=>$com_info )
		{
			// 需支付 金额
			$need_to_pay += $com_info->price * $nums[$com_info->id];
		}
		
		$data = array();
		// 接收 服务车型 服务人员  支付方式 （收货人 地址 电话备用） 6个信息
		$data = $request -> except('_token');
		// 服务车型
		if( empty($data['car']) )
		{
			$this->show_msg('请填写服务车型');
		}	
		// 服务人员
		if( empty($data['worker']) )
		{
			$this->show_msg('请选择服务人员');
		}	
		
		$user_info = DB::table('user')
					->where( 'id','=',Session::get('user_id') )
					// 状态正常
					->where( 'status','=','1' )
					->first();
		
		// 收件人
		if( empty($data['username']) )
		{
			$data['username']=$user_info ->name;
			// $this->show_msg('收货人姓名很重要');
		}
		// 地址
		if( empty($data['addr']) )
		{
			$data['addr']='店内';
			// $this->show_msg('收货地址很重要');
		}
		// 电话
		if( empty($data['phone']) )
		{
			$data['phone']=$user_info ->phone;
			// $this->show_msg('联系电话很重要');
		}
		// 付款方式
		if( empty($data['pay_id']) )
		{
			$this->show_msg('请选择付款方式');
		}
		// 下单用户ID
		$data['uid']=Session::get('user_id');
		// 余额支付
		if( $data['pay_id']==4 )
		{
			// 查询 用户的余额
			$money_info = DB::table('user')->select('money')->where('id',$data['uid'])->first();
			$money = $money_info -> money;
			// 余额 小于 需付款金额
			if( $money < $need_to_pay )
			{
				$this->show_msg("您的余额不足 请充值 <br/> 或选择其他付款方式");
			}
			// 余额 扣除
			$money -= $need_to_pay;
			// 修改 余额
			$res = DB::table('user')->where('id',$data['uid'])->update( ['money'=>$money] );
		}
		// 成交 金额
		$data['need_to_pay']=$need_to_pay;
		// 创建 时间
		$data['create_time']=date( "Y-m-d H:i:s",time() );
		$data['pay_time']=date( "Y-m-d H:i:s",time() );
		
		// 已支付
		$data['is_paid']=1;
		// 已完成
		$data['status']=5;
		
		
		// 1. 订单 主表
		$order_id = DB::table('order')->insertGetId($data);
		if( $order_id )
		{
			foreach( $coms_info as $key=>$com_info )
			{
				$data = array();
				$data['oid']=$order_id;
				$data['sku']=$com_info->id;
				$data['cnt']=$nums[$com_info->id];
				$data['price']=$com_info->price;
				// 2. 订单 详情表
				$res = DB::table('order_detail')->insertGetId($data);
				// 3. 修改 商品库存
				$stock_info = ComController::getStock($com_info->id);
				$diff = $stock_info->stock - $nums[$com_info->id];
				$res = DB::table('com')->where('id','=',$com_info->id)->update( ['stock'=>$diff] );
				// 库存为0
				if( $diff<1 )
				{
					// 修改商品状态为 无库存
					$res = DB::table('com')->where('id','=',$com_info->id)->update( ['status'=>'4'] );
				}
			}
			// 清空购物车 信息
			Session::forget('cart');
			Session::forget('cartTotal');
			$this->show_msg('交易成功');
		}
		else
		{
			$this->show_msg('交易失败');
		}
		
	}
	
	// 订单 成功 页
    public function success()
    {
		// 清空购物车 信息
		Session::forget('cart');
		Session::forget('cartTotal');
    	return view('Home.order.success');
    }
	
	// 订单列表页 (个人中心)
	public function orderList( $user_id )
	{
		// 1. 个人信息
		$user_info = DB::table('user')
					-> where('id',$user_id)
					-> first();
		
		$one = 'o.uid';
		$two = '=';
		$three = $user_id;
		// 2. 查询 订单 主表详情 
		$order = DB::table('order as o')
					-> select( "o.id","o.pay_time",'o.need_to_pay',DB::raw("case when o.pay_id=1 then '现金' when  o.pay_id=2 then '微信' when  o.pay_id=3 then '支付宝' when  o.pay_id=4 then '余额' end as 'payment_info' "),DB::raw("case when o.status=1 then '待付款' when  o.status=2 then '取消' when  o.status=3 then '待发货' when  o.status=4 then '已发货' when  o.status=5 then '交易完成' end as 'order_info' "),'o.car','o.worker' )
					-> where( $one,$two,$three )
					-> orderBy('o.id','desc')
					// -> whereIn('o.id',['1','3'])
					-> get();
		// 下过的订单 
		if( count($order) > 0 )
		{
			// 每个主订单的 详情信息
			$order_detail = array();
			// 每个主订单的 操作人员姓名
			$admin = array();
			$name_str = '';
			foreach( $order as $key=>$order_info )
			{
				// 3. 查询 订单 从表详情 
				$order_detail[$order_info->id] = DB::table('order_detail as odr')
						-> select("odr.sku","odr.cnt","odr.price","cp.pic_url",'odr.sku','c.name')
						-> leftJoin('com_pic as cp','cp.sku','=','odr.sku')
						-> leftJoin('com as c','c.id','=','odr.sku')
						-> where( 'cp.type','=','1' )
						-> where( 'odr.oid','=',$order_info->id )
						-> get();
				// 4. 查询 主订单的 施工人员
				$all_admin_id = explode( ',',rtrim( $order_info->worker,',' ) );
				$all_admin = DB::table('admin')
						-> select('name')
						-> whereIn('id',$all_admin_id)
						-> get();
				foreach( $all_admin as $key=>$admin_info )
				{
					$name_str .= $admin_info->name.',';
				}
				$admin[$order_info->id] = rtrim( $name_str,',' );
				$name_str = '';
			}
			// 个人中心 订单 列表 
			return view("Home.user.orderList",['order'=>$order,"order_detail"=>$order_detail,'user_info'=>$user_info,'admin'=>$admin ]);
		}else
		{
			// 暂无下单
			return view("Home.user.orderList",['order'=>$order,'user_info'=>$user_info]);
		}
		
	}
	
}
